// https://leetcode.cn/problems/symmetric-tree/description/?envType=study-plan-v2&envId=top-100-liked
// 101. 对称二叉树
// 简单
// 给你一个二叉树的根节点 root ， 检查它是否轴对称。

function TreeNode(val, left, right) {
  this.val = (val === undefined ? 0 : val)
  this.left = (left === undefined ? null : left)
  this.right = (right === undefined ? null : right)
}

/**
 * @param {TreeNode} root
 * @return {boolean}
 */
function isSymmetric(root) {
  // 记住这个双指针的模板，判断对称性需要这个套路
  const check = (p, q) => {
    if (!p && !q) return true
    if (!p || !q) return false

    return (p.val === q.val)
      // p 左子树根与 q右子树
      && check(p.left, q.right)
      // p 右子树与 q左子树
      && check(p.right, q.left)
  }

  return check(root, root)
}

